#include "gtest/gtest.h"
//Return true if n is a prime number.
bool IsPrime(int n){
	//Trivial case1:small numbers
	if(n <= 1) return false;
	//Trivial case2:even numbers
	if(n%2 == 0) return n == 2;
    //Now, we have that n is odd and n >= 3.
    //Try to divide n by every  odd number i,starting from 3
	for(int i = 3; ; i += 2){
		//We only have to try  i  up to the square root of n
		if(i > n/i) break;
		
		//Now, we have i <= n/i < n.
		//If n is divisible by i ,n is not prime.
		if(n % i == 0) return false;  	
	}
	//n has no integer factor in the rang(1, n), and thus is prime.
	return true;

}

class IsPrimeParamTest : public::testing::TestWithParam<int>
{

};

TEST_P(IsPrimeParamTest, Negative)
{
	int n = GetParam();
	EXPECT_FALSE(IsPrime(n));
}

INSTANTIATE_TEST_SUITE_P(NegativeTest, IsPrimeParamTest, testing::Values(-1,-2,-5,-100,-12345));

